home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / FWF / Dir / Directory.h < prev    next >
C/C++ Source or Header  |  1995-06-18  |  8KB  |  251 lines

  1. /****************************************************************************
  2.  
  3.     Directory.h
  4.  
  5.     This file contains the C definitions and declarations for the
  6.     Directory.c directory iteration code.
  7.  
  8.     This code is intended to be used as a convenient, machine
  9.     independent interface to iterate through the contents of a
  10.     directory.
  11.  
  12.  ****************************************************************************/
  13. /*
  14.  * Copyright 1990,1991,1992 Brian Totty
  15.  * 
  16.  * Permission to use, copy, modify, distribute, and sell this software
  17.  * and its documentation for any purpose is hereby granted without fee,
  18.  * provided that the above copyright notice appears in all copies and that
  19.  * both that copyright notice and this permission notice appear in
  20.  * supporting documentation, and that the name of Brian Totty or
  21.  * University of Illinois not be used in advertising or publicity
  22.  * pertaining to distribution of the software without specific, written
  23.  * prior permission.  Brian Totty and University of Illinois make no
  24.  * representations about the suitability of this software for any
  25.  * purpose.  It is provided "as is" without express or implied warranty.
  26.  *
  27.  * Brian Totty and University of Illinois disclaim all warranties with
  28.  * regard to this software, including all implied warranties of
  29.  * merchantability and fitness, in no event shall Brian Totty or
  30.  * University of Illinois be liable for any special, indirect or
  31.  * consequential damages or any damages whatsoever resulting from loss of
  32.  * use, data or profits, whether in an action of contract, negligence or
  33.  * other tortious action, arising out of or in connection with the use or
  34.  * performance of this software.
  35.  *
  36.  * Author:
  37.  *     Brian Totty
  38.  *     Department of Computer Science
  39.  *     University Of Illinois at Urbana-Champaign
  40.  *    1304 West Springfield Avenue
  41.  *     Urbana, IL 61801
  42.  * 
  43.  *     totty@cs.uiuc.edu
  44.  *     
  45.  */ 
  46.  
  47. #ifndef _DIRECTORY_H_
  48. #define _DIRECTORY_H_
  49.  
  50. #include <stdio.h>
  51. #include <sys/param.h>
  52. #ifndef MAXPATHLEN
  53. # define MAXPATHLEN 1024
  54. #endif
  55. #include <sys/types.h>
  56. #include <sys/stat.h>
  57.  
  58. #if defined(SYSV) || defined(SVR4)
  59. # ifndef __sgi
  60. #  ifndef getwd
  61. #   define getwd(path) getcwd(path, MAXPATHLEN)
  62. #  endif
  63. # endif
  64. #endif
  65.  
  66. #ifndef NO_DIRENT
  67. #include <dirent.h>
  68. #else
  69. #include <sys/dir.h>
  70. #define dirent direct
  71. #endif
  72.  
  73. #ifndef _SYS_NAME_MAX
  74. #ifndef MAXNAMLEN
  75. ERROR, ONE OF THESE MUST BE DEFINED
  76. #else
  77. #define    MAX_NAME_LENGTH    MAXNAMLEN
  78. #endif
  79. #else
  80. #define    MAX_NAME_LENGTH    _SYS_NAME_MAX
  81. #endif
  82.  
  83. #ifndef TRUE
  84. #define TRUE                1
  85. #endif
  86.  
  87. #ifndef FALSE
  88. #define    FALSE                0
  89. #endif
  90.  
  91. #define    PERM_READ            4
  92. #define    PERM_WRITE            2    
  93. #define    PERM_EXECUTE            1
  94.  
  95. #define    F_TYPE_DIR            1
  96. #define    F_TYPE_FILE            2
  97. #define    F_TYPE_CHAR_SPECIAL        3
  98. #define    F_TYPE_BLOCK_SPECIAL        4
  99. #define    F_TYPE_SYM_LINK            5
  100. #define    F_TYPE_SOCKET            6
  101. #define    F_TYPE_FIFO            7
  102.  
  103. /*--------------------------------------------------------------------------*
  104.  
  105.             D A T A    T Y P E    A C C E S S    M A C R O S
  106.  
  107.  *--------------------------------------------------------------------------*/
  108.  
  109.     /* Directory: Directory Iterator */
  110.  
  111. #define    DirectoryDir(dp)        ((dp)->filep)
  112. #define    DirectoryPath(dp)        ((dp)->path)
  113.  
  114.     /* FileInfo: Information About A File Or Link */
  115.  
  116. #define    FileInfoProt(fi)        ((fi)->protections)
  117. #define FileInfoOrigMode(fi)        ((fi)->orig_mode)
  118. #define    FileInfoUserID(fi)        ((fi)->user_id)
  119. #define    FileInfoGroupID(fi)        ((fi)->group_id)
  120. #define    FileInfoFileSize(fi)        ((fi)->size)
  121. #define    FileInfoLastAccess(fi)        ((fi)->last_access)
  122. #define    FileInfoLastModify(fi)        ((fi)->last_modify)
  123. #define    FileInfoLastStatusChange(fi)    ((fi)->last_status_change)
  124.  
  125. #define    FIProt(fi)            FileInfoProt(fi)
  126. #define FIOrigMode(fi)            FileInfoOrigMode(fi)
  127. #define    FIUserID(fi)            FileInfoUserID(fi)
  128. #define    FIGroupID(fi)            FileInfoGroupID(fi)
  129. #define    FIFileSize(fi)            FileInfoFileSize(fi)
  130. #define    FILastAccess(fi)        FileInfoLastAccess(fi)
  131. #define    FILastModify(fi)        FileInfoLastModify(fi)
  132. #define    FILastStatusChange(fi)        FileInfoLastStatusChange(fi)
  133.  
  134.     /* FType: File Type Macros */
  135.  
  136. #define    FTypeIsDir(ft)            ((ft) == F_TYPE_DIR)
  137. #define    FTypeIsFile(ft)            ((ft) == F_TYPE_FILE)
  138. #define    FTypeIsCharSpecial(ft)        ((ft) == F_TYPE_CHAR_SPECIAL)
  139. #define    FTypeIsBlockSpecial(ft)        ((ft) == F_TYPE_BLOCK_SPECIAL)
  140. #define    FTypeIsSymLink(ft)        ((ft) == F_TYPE_SYM_LINK)
  141. #define    FTypeIsSocket(ft)        ((ft) == F_TYPE_SOCKET)
  142. #define    FTypeIsFifo(ft)            ((ft) == F_TYPE_FIFO)
  143.  
  144.     /* DirEntry: Information About A Item In A Directory */
  145.  
  146. #define    DirEntryFileName(fi)        ((fi)->filename)
  147. #define    DirEntryType(fi)        ((fi)->file_type)
  148. #define    DirEntrySelfInfo(fi)        (&((fi)->self_info))
  149. #define    DirEntryActualInfo(fi)        (&((fi)->actual_info))
  150.  
  151. #define    DirEntryIsBrokenLink(fi)    ((fi)->broken_link)
  152. #define    DirEntryIsDirectoryLink(fi)    ((fi)->directory_link)
  153. #define    DirEntryIsDir(fi)        (FTypeIsDir(DirEntryType(fi)))
  154. #define    DirEntryIsFile(fi)        (FTypeIsFile(DirEntryType(fi)))
  155. #define    DirEntryIsCharSpecial(fi)    (FTypeIsCharSpecial(DirEntryType(fi)))
  156. #define    DirEntryIsBlockSpecial(fi)    (FTypeIsBlockSpecial(DirEntryType(fi)))
  157. #define    DirEntryIsSymLink(fi)        (FTypeIsSymLink(DirEntryType(fi)))
  158. #define    DirEntryIsSocket(fi)        (FTypeIsSocket(DirEntryType(fi)))
  159. #define    DirEntryIsFifo(fi)        (FTypeIsFifo(DirEntryType(fi)))
  160. #define    DirEntryLeadsToDir(fi)        (DirEntryIsDir(fi) ||        \
  161.                      DirEntryIsDirectoryLink(fi))
  162.  
  163. #define    DirEntryProt(d)            FIProt(DirEntrySelfInfo(d))
  164. #define DirEntryOrigMode(d)        FIOrigMode(DirEntrySelfInfo(d))
  165. #define    DirEntryUserID(d)        FIUserID(DirEntrySelfInfo(d))
  166. #define    DirEntryGroupID(d)        FIGroupID(DirEntrySelfInfo(d))
  167. #define    DirEntryFileSize(d)        FIFileSize(DirEntrySelfInfo(d))
  168. #define    DirEntryLastAccess(d)        FILastAccess(DirEntrySelfInfo(d))
  169. #define    DirEntryLastModify(d)        FILastModify(DirEntrySelfInfo(d))
  170. #define    DirEntryLastStatusChange(d)    FILastStatusChange(DirEntrySelfInfo(d))
  171.  
  172. /*--------------------------------------------------------------------------*
  173.  
  174.              D A T A    T Y P E    D E F I N I T I O N S
  175.  
  176.  *--------------------------------------------------------------------------*/
  177.  
  178.     /* Directory: Directory Iterator */
  179.  
  180. typedef struct
  181. {
  182.     DIR *filep;
  183.     char path[MAXPATHLEN + 2];
  184. } DIRECTORY;
  185.  
  186. typedef DIRECTORY Directory;
  187.  
  188.     /* FileInfo: Information About A File Or Link */
  189.  
  190. typedef struct
  191. {
  192.     short protections;
  193.     short orig_mode;
  194.     short user_id;
  195.     short group_id;
  196.     long size;
  197.     time_t last_access;
  198.     time_t last_modify;
  199.     time_t last_status_change;
  200. } FILE_INFO;
  201.  
  202. typedef    FILE_INFO FileInfo;
  203.  
  204.     /* DirEntry: Information About A Item In A Directory */
  205.  
  206. typedef struct
  207. {
  208.     char filename[MAX_NAME_LENGTH + 1];
  209.     short file_type;
  210.     short broken_link;
  211.     short directory_link;
  212.     FileInfo self_info;
  213.     FileInfo actual_info;
  214. } DIR_ENTRY;
  215.  
  216. typedef DIR_ENTRY DirEntry;
  217.  
  218. /*--------------------------------------------------------------------------*
  219.  
  220.         L O W    L E V E L    D I R E C T O R Y    I N T E R F A C E
  221.  
  222.  *--------------------------------------------------------------------------*/
  223.  
  224. #if (!NeedFunctionPrototypes)
  225.  
  226. int    DirectoryOpen();
  227. void    DirectoryRestart();
  228. void    DirectoryClose();
  229. long    DirectoryTellPosition();
  230. void    DirectorySetPosition();
  231. int    DirectoryReadNextEntry();
  232. char *    DirectoryPathExpand();
  233. void    DirEntryDump();
  234.  
  235. #else
  236.  
  237. int    DirectoryOpen(char *dir_name, Directory *dp);
  238. void    DirectoryRestart(Directory *dp);
  239. void    DirectoryClose(Directory *dp);
  240. long    DirectoryTellPosition(Directory *dp);
  241. void    DirectorySetPosition(Directory *dp, long int pos);
  242. int    DirectoryReadNextEntry(Directory *dp, DirEntry *de);
  243. char *    DirectoryPathExpand(char *old_path, char *new_path);
  244. void    DirEntryDump(FILE *fp, DirEntry *de);
  245.  
  246. #endif
  247.  
  248. #endif
  249.  
  250.  
  251.